/*
 * leitura.c
 *
 *  Created on: 05/06/2011
 *      Author: joao
 */

#include "leitura.h"

/*Verifica se determinado char é uma letra */
int ehLetra (char c){
    if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
        return 1;

    return 0;
}

/*Funcao que separa palavras dentro de uma string qualquer, e a retorna */
char *retornaPalavra (char linha[MAX_LINHA], int *i){
    char* palavra;
    palavra =(char *) malloc (100*sizeof(char));
    int j = 0;
    while(ehLetra(linha[*i])){
        palavra[j] = linha[*i];
        *i = *i + 1;
        j++;
    }
    palavra[j] = '\0';
    return palavra;
}

/* Funcao que imprime para o arquivo de indice */
void geraIndicePreOrdem (no *P, FILE *fp){
    TipoPosicao i;

    if (P == NULL) return;

    if (P->esq != NULL)
        geraIndicePreOrdem(P->esq, fp);

    fprintf(fp, "%s ", P->chave);

    for(i = Primeiro(&P->linhas); i != FIM; i = Seguinte(i, &P->linhas))
        fprintf(fp, "%d ", Acessa(i, &P->linhas));

    fprintf(fp, "\n");

    if(P->dir != NULL)
        geraIndicePreOrdem(P->dir, fp);

}

/*Funcao que chama a pre-ordem do indice e abre o aruqivo */
void geraIndice (no *P){
    FILE *fp;
    if ( (fp = fopen(indice, "w")) == NULL){
            printf("erro ao abrir o arquivo de indice.");
    } else {
        geraIndicePreOrdem(P, fp);
        fclose(fp);
        printf("Arquivo de indice gerado com sucesso - %s.\n", indice);
    }

}


/*Funcao que faz a primeira leitura do arquivo e joga as palavras para a arvore AVL */
no *lerArquivo (){
    FILE *fp;
    char linha[MAX_LINHA];
    char *palavra;
    int linha_atual = 1, i;

    no *P  = NULL;

    if( (fp = fopen(arquivo, "rb")) == NULL){
        printf("Erro ao abrir o arquivo.\n");
    } else {

        /* Varre as linhas, pegando as palavras de cada */
        while(fgets(linha, MAX_LINHA, fp) != NULL){

            i = 0;

            /* Separa as palavras */
            while(linha[i] != '\0'){
                if (ehLetra(linha[i])){
                    palavra = (char *)malloc(100*sizeof(char));
                    strcpy(palavra, retornaPalavra(linha, &i));
                    insereAVL(palavra, &P, linha_atual);
                }
                i++;
            }

            linha_atual++;

        }
    }
    return P;

}
